阅读更多

1顶
0踩

开源软件
acl 3.0.12 版本发布了。

项目主页:https://sourceforge.net/projects/acl/
技术文章主页:http://zsxxsz.ietye.com/

acl 是 one Advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows 平台;整个 acl 项目主要包含三个函数库:

  • lib_acl:纯C开发的最基础库,主要包含网络通信及服务器编程框架以及其它丰富的功能)
  • lib_protocol:包含 HTTP/PING/SMTP 通信协议的C语言实现
  • lib_acl_cpp:基于 lib_acl 及 lib_protocol 两个C库,提供了更为强大的编程接口及丰富的功能类

acl 包括以下丰富的常用函数库:

  1. 常见网络应用库: SMTP 客户端库/PING 库/memcache 客户端库/handlersocket 客户端库/beanstalk 客户端库
  2. HTTP 网络库:HTTP 客户端/服务端库,C++版 HttpServlet 类,HTTP COOKIE/HTTP SESSION 等
  3. 邮件解析库:mime解析库/RFC2047/RFC2048/mime base64/mime qp/mime uucode 等
  4. 网络通信库:阻塞/非阻塞网络 IO 库(其中 lib_acl_cpp 库通过嵌入 polarssl 而具备了 SSL 的能力)
  5. 服务器框架:包括进程池模式、线程池模式、非阻塞模式、UDP通信模式及触发器模式
  6. 事件引擎:支持 select、poll(for unix)、epoll(for linux)、kqueue(for bsd)、devpoll(for solaris)、iocp(for win32)、win32 窗口消息(for win32)事件引擎
  7. 通用连接池库:高效的连接池基础类库,支持丰富的功能
  8. 数据库客户端库:对原生的数据库客户端库进行了二次封装,使编程更为简易,功能更为丰富
  9. xml/json 流式解析库:区别于网上其它已有的 xml/json 解析库,acl 中的 xml/json 解析库采用有限状态机方式解析数据,处理方式更为灵活

本次 acl 升级除了一些常见 bug 修复外,主要针对 ACL 的通信模块增加了 UDP 的通信能力,同时增加了 UDP 服务器通信模板。主要改进包括:

1. 基础库lib_acl改进

  • feature:acl_single_server.c, acl_ioctl_server.c, acl_aio_server.c, acl_udp_server.c 增加了可以获得本地监听套接口流对象集合的函数
  • feature:master 服务器框架增加了专门针对 UDP 的服务器模板 acl_udp_server.c/acl_udp_params.h
  • feature:ACL_VSTREAM 支持 UDP 传输; acl_vstream_net.c 中增加了 acl_vstream_bind 函数用来绑定 UDP 传输模式
  • feature:ACL_VSTREAM 增加了 acl_vstream_set_local_addr, acl_vstream_set_peer_addr
  • feature:ACL_VSTREAM 中添加了 struct sockaddr_in 类型的两个指针,以便于 ACL_VSTREAM 很容易支持 UDP 传输
  • feature:ACL_VSTREAM 对象增加了 acl_vstream_set_local, acl_vstream_set_remote, acl_vstream_set_path 三个函数
  • performance:ACL_VSTREAM 中将 remote_addr, local_addr 定义为指针,从而大大减少了 ACL_VSTREAM 对象创建时的尺寸大小
  • compile:增加了工程文件 Makefile.db,使用该工程文件编译,则可以使用 mysql 数据库功能,使用 Makefile 工程文件编译,则可以 lib_acl.a 更为干净 (即不依赖于任何第三方库)
  • bugfix:events_select.c/events_select_thr.c 当套接字监听集合为空时休眠的时间单位为秒,需要将微秒级的 delay 转为秒级
  • other:events 模块 ACL_EVENT_NOTIFY_RDWR/ACL_EVENT_NOTIFY_TIME 函数接口类型重新定义,在回调函数中增加了 ACL_EVENT,ACL_VSTREAM 参数,从而方便用户直接使用;因为这两个接口的重新定义,导致了很多功能模块做相应修改,主要影响的模块有:event, master, aio, ioctl
  • other:将 master 模块下的源文件代码排版整理了一下
  • other:acl_vstream.c:acl_vstream_set_remote 重命名为 acl_vstream_set_peer
2. 应用协议库lib_protocol改进

  • bugfix:http_chat_async.c 中 http_res_body_get_async/http_req_body_get_async 两个函数没有对 ctx->read_cnt 置 0
  • other:lib_acl 库中 ACL_EVENT_NOTIFY_RDWR/ACL_EVENT_NOTIFY_TIME 函数接口定义的修改,与之相关的模块(icmp)进行了修改
  • other:因为 lib_acl 基础库中的 ACL_VSTREAM 读写回调函数接口变更,调整了与之相关的部分内部接口,主要影响到了 icmp 模块中 icmp_stream.c 中的内部接口
3. 功能丰富的C++库lib_acl_cpp改进

  • feature:aio_stream 增加了 get_peer/get_local 用来获得网络连接流的本地及远程地址
  • feature:master_udp 服务器模板增加了可在 proc_on_init() 虚函数中获得本地绑定套接字流对象集合的函数功能:get_sstreams()
  • feature:master 服务器框架增加了 master_udp 服务模板类
  • feature:connect_manager 类增加了根据键值字符串的哈希值获取连接池对象的虚函数,从而有利于在分布式环境里使用连接池
  • feature:connect_manager/connect_pool 类增加了针对每个连接池有一个其位于连接池集合中的下标索引
  • feature:http_request::request 中原来只能指定 GET/POST 两种请求方法,现在可以指定多种请求方法
  • feature:http_header 允许设置自定义 (即除 GET/POST/PUT/CONNECT/PURGE之个) 的请求头命令字
  • feature:memcache 类支持流式读写数据,从而可以支持大 value 的存取方式
  • feature:master_threads 类在单独运行方式的使用场景接近于在 acl_master 框架下的运行场景
  • feature:master_threads/master_aio/master_proc 类支持在单独运行模式下监听多个地址
  • feature:acl_cpp_init.cpp 中添加了 WIN32 下关闭 DOS 窗口的函数
  • feature:http/memcache 模块增加了连接池管理类
  • compile:acl_cpp_init.cpp 中 freopen 返回的文件句柄因为未被使用而使编译器报警
  • compile:增加了 Makefile.db 工程文件,使用该文件编译则需要 mysql/sqlite 库; 如果不需要数据库相关的功能,则使用 Makefile 工程文件进行编译
  • bugfix:memcache 类中当连接异常中断重试时会因请求数据被清掉而出错,原因是请求与响应共用同一个缓冲区所致,现将请求缓冲区与响应缓冲区分开
  • bugfix:memcache.cpp 当调用 open 函数连接 memcached 服务器失败时,用 valgrind 检查出记录错误日志时引用了一个未经初始化的变量
  • samples:增加了针对 UDP 的测试用例 udp_client
  • other:lib_acl 库中 ACL_EVENT_NOTIFY_RDWR/ACL_EVENT_NOTIFY_TIME 函数接口定义的修改,与之相关的模块进行了修改
  • other:因为 lib_acl 基础库中的 ACL_VSTREAM 读写回调函数接口变更,调整了与之相关的部分内部接口,主要影响到了 ssl_stream/ssl_aio_stream
  • other:connpool/http_request_pool/memcache_pool:调整了构造函数,去掉了最后一个参数
1
0
评论 共 1 条 请登录后发表评论
1 楼 zsxxsz 2013-10-09 09:35
抱歉,其中的“技术文章主页:http://zsxxsz.ietye.com/ ”地址写错了,应该是:“技术文章主页:http://zsxxsz.iteye.com/ ”

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 一个人做饭有哪些推荐?

    Chen Sam ,一个空号。 355 人赞同 -- 2015.12.28. 一个圣诞节长周末多了100个赞..What's going on here..感恩。 有同学私信说需要详细步骤的做饭教程,但是这里篇幅太局限了..如果开一个微信公众号什么...

  • 创意发明:单片机做的半导体智能制冷小冰箱 原理图和程序源代码等技术文件

    准备买点年货放冰箱,正好我最近不太忙,便想着做一个小冰箱玩玩 废话不多说,先介绍器材 器材:一个电源模块,220v转12v,6A。以及一个封装好的制冷器,元件清单都在原理图上可以看出来,继电器用的是继电器模块...

  • python的三大错误类型_浅谈使用Python变量时要避免的3个错误

    浅谈使用Python变量时要避免的3个错误ython编程中经常遇到一些莫名其妙的错误, 其实这不是语言本身的问题, 而是我们忽略了语言本身的一些特性导致的,今天就来看下使用Python变量时导致的3个不可思议的错误, 以后...

  • 大学回忆录

    2014年8月25日,来到深圳的昨天所个特殊的日子。

  • 关于大象,冰箱和软件项目报价的故事

    把大象塞进冰箱,需要几个步骤? 标准答案是:三个,第一,打开冰箱门,第二,把大象牵进冰箱,第三,关上冰箱门。 在某个软件项目的竞标会上,一家公司力克群雄,以130万元的最低价格和“完全符合客户需求”的...

  • 任正非对话卡普兰:5G是一个数据通道,未来最大的产业是人工智能

    大家认为只要数量多,就代表着正确性,如果说很多人都在做同样的事情,就会产生一个大范围的影响。比方说现在很短时间里就可能出现2000万家社交媒体发布的消息,所以我觉得是需要行业内进行一定的合作和努力去打消...

  • 三个故事带你快速理解C、C++、C#的区别!

    C语言是一个极其高冷的人,因此回答都是冷冷的: 我:你好C语言,我想把大象放到冰箱里,帮我做好不好? C:好 我:那我们要怎么做呢? C:猜 我:额。。。是不是应该先创造一只大象? C:是 我:怎么创造呢...

  • 身体才是革命本钱!设计师应培养的7大健康习惯

    或者:找个给送饭的女朋友(我是认真的) 健康问题 6:压力 网页设计是有压力的。思考一下作为一个网页设计师的你所面对的压力: 期限 客户会议 竞争压力 投诉和要求 面试新客户 压力...

  • 三个小故事带你快速了解C、C++和C#

    各位,C、C++和C#这三种语言大家肯定都听过或者学过,那这三种都带字母C的语言有什么区别呢,今天小编通过三个小故事和大家简单聊一聊。 故事1:把大象装到冰箱里 C C语言是一个极其高冷的人,因此回答都是...

  • 一张图带你看懂 ,web前端开发应该知道的HTML5六大趋势

    有点类似个人电 脑早期世界,那个时候的每家电脑都有自己的操作系统和编程语言,开发者疲于做不同版本,其实DOS的盛行也很大程度是因为开发者实在没精力给其他电脑写程 序。跨平台技术在早期大多因为性能问题夭折,...

  • 启明星辰ADLab西南团队负责人王东:智能化的安全——设备&应用&ICS

    11月18号,2017看雪安全开发者峰会在北京悠唐皇冠假日酒店举行。来自全国各地的开发人员、网络安全爱好者及相应领域顶尖专家,在2017看雪...很大一部分为智能设备做开发的程序员往往只关注如何实现功能,而忽略了其...

  • 三个小故事带你快速了解C、C++和C#的区别

    三个小故事带你快速了解C、C++和C# 各位,C、C++和C#这三种语言大家肯定都听过或者学过,那这三种都带字母C的语言有什么区别呢,今天小编通过三个小故事和大家简单聊一聊。 故事1:把大象装到冰箱里 C C语言是一个...

  • 关于编程语言未来的12个预测(仁者见,仁智者见智,不喜勿喷谢谢)

    科技发展趋势的变化,早已不是什么秘密。而创造这些技术的工具和方法当然更是在不断变化。...不管这些预测有没有道理,但是至少能给我们大部分人一定的启示,我们不得不读。  因为未来比我们想象的,要变化得快。

  • 竹间智能:人机交互未来如何改变人类生活

    本文是AI科技大本营6月21日在线公开课的文字版,分享嘉宾是竹间智能的 CTO 翁嘉颀。 现阶段利用 NLP 以及 NLU 技术及机器学习方式,正慢慢脱离关键词的束缚。再下一步呢?是否机器人能主动跟人产生互动?没有情感...

  • 《上海堡垒》究竟几何?让我用爬虫一探究竟

    评论内容:其实讲的是一个男孩在成为男人路上的“末日之恋”的故事,格局并没有很大,就是个科幻外衣下的爱情故事。一旦接受了这个设定,整个剧情的框架是没有太大问题的。 前面说了格局不算大,但是特效场面还是做...

  • 为什么边缘正在“吞噬”这个世界

    作为一名公司创始人,我们公司的业务就是在边缘支持GraphQL,因此,我想就为什么边缘正在“吞噬”整个世界这个话题,来分享一下我的看法。我们将快速回顾过去,再俯瞰当下,并根据目前的观察结果,用第一性原理进行...

  • 生活随记 - 2020国庆第四天

    凌晨4:00起来,简单洗漱下,开始收拾杂物间,给各个包裹打包封口,全部放到客厅里面集中起来,比我预计中的多了许多,客厅里面各种包裹推挤如山,幸好提前准备了便条,每个包裹上面贴了便条,便条上面填写了包裹里面...

  • 两个字节,如果写入一个大于65535的数?

    两个字节,如果写入一个大于65535的数? Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiBase/html/delphi_20061220165725103.html 正常情况下FFFF为65535,如何突破呢? 突破不了了,想办法改成四个字节...

  • 大学英语四级考试大纲

    每一(个)abandon vt.丢弃;放弃,抛弃ability n.能力;能耐,本领able a.有能力的;出色的abnormal a.不正常的;变态的aboard ad.在船(车)上;上船about prep.关于;在…周围above prep.在…上面;高于abroad ad.(在...

  • 用C语言写一个查单词的小demo

    用C语言写一个查单词的小demo #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, const char *argv[]) { // 用只读的方式打开我们的单词库 FILE *fp = fopen(...

Global site tag (gtag.js) - Google Analytics